package com.woniuxy.house.web;

import com.woniuxy.house.entity.Message;
import com.woniuxy.house.entity.User;
import com.woniuxy.house.service.MessageService;
import com.woniuxy.house.service.UserService;
import com.woniuxy.house.utils.JwtUtil;
import com.woniuxy.house.vo.ResponseEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 基于消息界面
 */
@RestController
@RequestMapping("/api")
public class MessageController {

    @Autowired
    private JwtUtil jwtUtil;

    @Autowired
    private UserService userService;

    @Autowired
    private MessageService messageService;

    //这里在界面 一点击消息按钮 就显示与我发送过消息的所有用户列表 展示用户的头像 名字，
    //展示这些用户与我联系的最后时间 和 最后一句消息
    //然后点消息到聊天页面 是我与这个人的具体聊天内容 根据时间先后顺序排序

    @RequestMapping("/msg")
    //这里只是把接收者用户数据返回
    public ResponseEntity chatList(@RequestHeader String jwt){
        if(jwtUtil.verifyJWT(jwt)){
            Integer id =(Integer) jwtUtil.verifyJWTGetUserId(jwt, "id");
            User own = userService.getUsrById(id);//查询用户自己的信息
            List<Message> messages = messageService.getByUserId(id);//这里根据用户id得到他所有发送的 接受的的信息
             List<User> users=new ArrayList<>();
            for (Message m:messages) {
                User receiver = m.getReceiver();//这里得到信息接收方对象
                User sender = m.getSender();//这里得到信息接收方对象
                for(int i=0;i<users.size();i++){
                    if(!users.contains(receiver)){//如果users集合中没有包含这个接收消息用户
                        users.add(receiver);//这个集合也包含了用户自己的信息
                    }
                    if(!users.contains(sender)){//如果users集合中没有包含这个发送消息用户
                        users.add(sender);//这个集合也包含了用户自己的信息
                    }
                }
            }
            users.remove(own);
            return new ResponseEntity("200","成功",users);
        }else{
            return  ResponseEntity.FAIL;
        }

    }

    @RequestMapping("/info")
    //这里 展示这些用户与我联系的最后时间 和 最后一句消息
    public ResponseEntity info(@RequestHeader String jwt){
        if(jwtUtil.verifyJWT(jwt)){
            Integer id =(Integer) jwtUtil.verifyJWTGetUserId(jwt, "id");
            List<Message> messages = messageService.getByUserId(id);//这里根据用户id得到他所有的信息
            Map map=new HashMap();
            Integer max=Integer.MIN_VALUE;//这里设置一个变量 最大的id赋值给他
            for (Message m:messages) {
                Integer receiverId = m.getReceiver().getId();//这里得到接收信息的对象id

                //在这里比较信息的id大小 谁的id最大 应该就是时间最迟的信息 这条信息作为数据返回
                List<Message> messageList = messageService.getAll(id, receiverId);//这里得到两个用户聊天的所有记录
                for(int i=0;i<messageList.size();i++){
                    if(messageList.get(i).getId()>messageList.get(i+1).getId()){
                        max=messageList.get(i).getId();
                    }else{
                        max=messageList.get(i+1).getId();
                    }
                }
                Message msg = messageService.getById(max);//这里就得到时间最晚的信息
                   map.put(receiverId,msg);
                }
            return new ResponseEntity("200","成功",map);
        }else{
            return  ResponseEntity.FAIL;
        }
    }


}
